library(tidyverse)
library(dbplyr)
library(dplyr)
# Read in seperate databases
stock_database_1980_1996<-read.csv("ibes_from_1980_1996_20_consecutive_months_nasdaq.csv",header=TRUE)
stock_database_1997_2018<-read.csv("ibes_from_1997_2018_20_consecutive_months_nasdaq.csv",header=TRUE)
# Adding the new statistics that we want to add
# Adding the average analyst forecast for each month
stock_database_1980_1996<- stock_database_1980_1996 %>% group_by(cusip, analyst_predict_year,analyst_predict_month,forecast_end_period)%>% mutate(average_forecasted_earnings = mean(f_eps))
stock_database_1997_2018<- stock_database_1997_2018 %>% group_by(cusip, analyst_predict_year,analyst_predict_month,forecast_end_period)%>% mutate(average_forecasted_earnings = mean(f_eps))
#Getting the number of analysts over the period
stock_database_1980_1996<- stock_database_1980_1996 %>% group_by(cusip,forecast_end_period)%>% mutate(analyst_predictions_over_period = max(number_of_estimates))
stock_database_1997_2018<- stock_database_1997_2018 %>% group_by(cusip,forecast_end_period)%>% mutate(analyst_predictions_over_period = max(number_of_estimates))
# Adding the scaled forecast standard deviation
stock_database_1980_1996$scaled_feps <- stock_database_1980_1996$forecast_standard_deviation/stock_database_1980_1996$price
stock_database_1997_2018$scaled_feps <- stock_database_1997_2018$forecast_standard_deviation/stock_database_1997_2018$price
# change forecast end period from factor to date
stock_database_1980_1996$forecast_end_period<-as.Date(stock_database_1980_1996$forecast_end_period)
stock_database_1997_2018$forecast_end_period<-as.Date(stock_database_1997_2018$forecast_end_period)
# Parse to get the year of end date
stock_database_1980_1996$forecast_end_year <- as.numeric(format(stock_database_1980_1996$forecast_end_period,"%Y"))
stock_database_1997_2018$forecast_end_year <- as.numeric(format(stock_database_1997_2018$forecast_end_period,"%Y"))
# See databases with all the values we need
stock_database_1980_1996
stock_database_1997_2018
# Segment the stock periods to only get june companies
june_stock_database_1980_1996 <- stock_database_1980_1996 %>% filter(analyst_predict_month==6)
june_stock_database_1997_2018 <- stock_database_1997_2018 %>% filter(analyst_predict_month==6)
# see the databases filtered
june_stock_database_1980_1996
june_stock_database_1997_2018
Filter the database to boil down to keep only months in june that
first_month_june_stock_database_1980_1996 <- june_stock_database_1980_1996
first_month_june_stock_database_1980_1996$first
Unknown or uninitialised column: 'first'.
NULL
for(row in 1:nrow(first_month_june_stock_database_1980_1996)){
analyst_predict_year<-first_month_june_stock_database_1980_1996[row,'analyst_predict_year']
forecast_end_year<- first_month_june_stock_database_1980_1996[row,'forecast_end_year']
if(forecast_end_year==(analyst_predict_year+1)){
first_month_june_stock_database_1980_1996[row,'first']='true'
}
}
first_month_june_stock_database_1980_1996 <- first_month_june_stock_database_1980_1996 %>% filter(first =='true')
first_month_june_stock_database_1997_2018 <- june_stock_database_1997_2018
first_month_june_stock_database_1997_2018$first
Unknown or uninitialised column: 'first'.
NULL
for(row in 1:nrow(first_month_june_stock_database_1997_2018)){
analyst_predict_year<-first_month_june_stock_database_1997_2018[row,'analyst_predict_year']
forecast_end_year<- first_month_june_stock_database_1997_2018[row,'forecast_end_year']
if(forecast_end_year==(analyst_predict_year+1)){
first_month_june_stock_database_1997_2018[row,'first']='true'
}
}
first_month_june_stock_database_1997_2018 <- first_month_june_stock_database_1997_2018 %>% filter(first =='true')
# Show the results
first_month_june_stock_database_1980_1996
first_month_june_stock_database_1997_2018
# take out the repeats
first_unique_month_june_stock_database_1980_1996<- first_month_june_stock_database_1980_1996 %>% distinct(cusip,analyst_predict_year,.keep_all = TRUE)
first_unique_month_june_stock_database_1997_2018<- first_month_june_stock_database_1997_2018 %>% distinct(cusip,analyst_predict_year,.keep_all = TRUE)
first_unique_month_june_stock_database_1980_1996
first_unique_month_june_stock_database_1997_2018
# Create Quartile by Year by MC/Scaled FEPS
first_unique_month_june_stock_database_1980_1996_quartiled <-first_unique_month_june_stock_database_1980_1996 %>%group_by(analyst_predict_year)%>% mutate (quintile_feps = ntile(scaled_feps,4))
first_unique_month_june_stock_database_1980_1996_quartiled<-first_unique_month_june_stock_database_1980_1996_quartiled%>%group_by(analyst_predict_year)%>% mutate (quintile_mc = ntile(market_capitalization,4))
first_unique_month_june_stock_database_1997_2018_quartiled <-first_unique_month_june_stock_database_1997_2018 %>%group_by(analyst_predict_year)%>% mutate (quintile_feps = ntile(scaled_feps,4))
first_unique_month_june_stock_database_1997_2018_quartiled<-first_unique_month_june_stock_database_1997_2018_quartiled%>%group_by(analyst_predict_year)%>% mutate (quintile_mc = ntile(market_capitalization,4))
first_unique_month_june_stock_database_1980_1996_quartiled
first_unique_month_june_stock_database_1997_2018_quartiled
Write the results to csv
write.csv(first_unique_month_june_stock_database_1980_1996_quartiled,"first_unique_month_june_stock_database_1980_1996_quartiled.csv")
write.csv(first_unique_month_june_stock_database_1997_2018_quartiled,"first_unique_month_june_stock_database_1997_2018_quartiled.csv")
desired_columns <- c('cusip','forecast_end_period','quintile_feps','quintile_mc')
temp_1980_1996_quartiles<- first_unique_month_june_stock_database_1980_1996_quartiled[,desired_columns]
temp_1997_2018_quartiles<- first_unique_month_june_stock_database_1997_2018_quartiled[,desired_columns]
In order to label the rest of the data, we need to take the cusip, forecast_end_period,quartile_feps,quintile_mc and match it to the original data
all_quartiled_data_1980_1996 <- inner_join(stock_database_1980_1996,temp_1980_1996_quartiles,by=c('cusip'='cusip','forecast_end_period'='forecast_end_period'))
all_quartiled_data_1997_2018 <- inner_join(stock_database_1997_2018,temp_1997_2018_quartiles,by=c('cusip'='cusip','forecast_end_period'='forecast_end_period'))
all_quartiled_data_1980_1996
all_quartiled_data_1997_2018
Write to a csv file
write.csv(all_quartiled_data_1980_1996,"full_dataset_from_1980_1996_quartiled.csv")
write.csv(all_quartiled_data_1997_2018,"full_dataset_from_1997_2018_quartiled.csv")
Keep only one distinct row per data
distinct_quartiled_1980_1996 <- all_quartiled_data_1980_1996 %>% distinct(cusip,analyst_predict_year,analyst_predict_month,.keep_all = TRUE)
distinct_quartiled_1997_2018 <- all_quartiled_data_1997_2018 %>% distinct(cusip,analyst_predict_year,analyst_predict_month,.keep_all = TRUE)
distinct_quartiled_1980_1996
distinct_quartiled_1997_2018
Mode Function
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
Construct the Summary Stat Table by Market Cap
stock_database_1980_1996_quartiled_mc_table<- data.frame(matrix(ncol = 5, nrow = 6))
x <- c("Overall","Q1","Q2","Q3","Q4")
colnames(stock_database_1980_1996_quartiled_mc_table) <- x
y <- c("number_of_analysts","forecasted_earnings","actual_earnings","scaled_forecast","price","market_value")
rownames(stock_database_1980_1996_quartiled_mc_table)<-y
quartile_one <-distinct_quartiled_1980_1996%>% filter(quintile_mc==1)
quartile_two<-distinct_quartiled_1980_1996 %>% filter (quintile_mc==2)
quartile_three<-distinct_quartiled_1980_1996 %>% filter (quintile_mc==3)
quartile_four<-distinct_quartiled_1980_1996 %>% filter (quintile_mc==4)
june_quartile_one <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_mc ==1)
june_quartile_two <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_mc ==2)
june_quartile_three <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_mc ==3)
june_quartile_four <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_mc ==4)
# Number of Analysts
stock_database_1980_1996_quartiled_mc_table[1,1]<-mean(distinct_quartiled_1980_1996$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_mc_table[1,2]<-mean(quartile_one$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_mc_table[1,3]<-mean(quartile_two$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_mc_table[1,4]<-mean(quartile_three$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_mc_table[1,5]<-mean(quartile_four$analyst_predictions_over_period)
# forecasted_earnings
stock_database_1980_1996_quartiled_mc_table[2,1]<-mean(distinct_quartiled_1980_1996$average_forecasted_earnings)
stock_database_1980_1996_quartiled_mc_table[2,2]<-mean(quartile_one$average_forecasted_earnings)
stock_database_1980_1996_quartiled_mc_table[2,3]<-mean(quartile_two$average_forecasted_earnings)
stock_database_1980_1996_quartiled_mc_table[2,4]<-mean(quartile_three$average_forecasted_earnings)
stock_database_1980_1996_quartiled_mc_table[2,5]<-mean(quartile_four$average_forecasted_earnings)
# Actual Earnings
stock_database_1980_1996_quartiled_mc_table[3,1]<-mean(distinct_quartiled_1980_1996$actual_annual_eps)
stock_database_1980_1996_quartiled_mc_table[3,2]<-mean(quartile_one$actual_annual_eps)
stock_database_1980_1996_quartiled_mc_table[3,3]<-mean(quartile_two$actual_annual_eps)
stock_database_1980_1996_quartiled_mc_table[3,4]<-mean(quartile_three$actual_annual_eps)
stock_database_1980_1996_quartiled_mc_table[3,5]<-mean(quartile_four$actual_annual_eps)
# FEPS
stock_database_1980_1996_quartiled_mc_table[4,1]<-mean(first_unique_month_june_stock_database_1980_1996_quartiled$scaled_feps)
stock_database_1980_1996_quartiled_mc_table[4,2]<-mean(june_quartile_one$scaled_feps)
stock_database_1980_1996_quartiled_mc_table[4,3]<-mean(june_quartile_two$scaled_feps)
stock_database_1980_1996_quartiled_mc_table[4,4]<-mean(june_quartile_three$scaled_feps)
stock_database_1980_1996_quartiled_mc_table[4,5]<-mean(june_quartile_four$scaled_feps)
# Price
stock_database_1980_1996_quartiled_mc_table[5,1]<-mean(distinct_quartiled_1980_1996$price)
stock_database_1980_1996_quartiled_mc_table[5,2]<-mean(quartile_one$price)
stock_database_1980_1996_quartiled_mc_table[5,3]<-mean(quartile_two$price)
stock_database_1980_1996_quartiled_mc_table[5,4]<-mean(quartile_three$price)
stock_database_1980_1996_quartiled_mc_table[5,5]<-mean(quartile_four$price)
# Market Cap
stock_database_1980_1996_quartiled_mc_table[6,1]<-mean(distinct_quartiled_1980_1996$market_capitalization)
stock_database_1980_1996_quartiled_mc_table[6,2]<-mean(quartile_one$market_capitalization)
stock_database_1980_1996_quartiled_mc_table[6,3]<-mean(quartile_two$market_capitalization)
stock_database_1980_1996_quartiled_mc_table[6,4]<-mean(quartile_three$market_capitalization)
stock_database_1980_1996_quartiled_mc_table[6,5]<-mean(quartile_four$market_capitalization)
stock_database_1980_1996_quartiled_mc_table
Construct the Summary Stat for standard FEPS
stock_database_1980_1996_quartiled_feps_table <- data.frame(matrix(ncol = 5, nrow = 6))
x <- c("Overall","Q1","Q2","Q3","Q4")
colnames(stock_database_1980_1996_quartiled_feps_table) <- x
y <- c("number_of_analysts","forecasted_earnings","actual_earnings","scaled_forecast","price","market_value")
rownames(stock_database_1980_1996_quartiled_feps_table)<-y
quartile_one <-distinct_quartiled_1980_1996%>% filter(quintile_feps==1)
quartile_two<-distinct_quartiled_1980_1996 %>% filter (quintile_feps==2)
quartile_three<-distinct_quartiled_1980_1996 %>% filter (quintile_feps==3)
quartile_four<-distinct_quartiled_1980_1996 %>% filter (quintile_feps==4)
june_quartile_one <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_feps==1)
june_quartile_two <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_feps==2)
june_quartile_three <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_feps==3)
june_quartile_four <-first_unique_month_june_stock_database_1980_1996_quartiled %>% filter (quintile_feps==4)
# Number of Analysts
stock_database_1980_1996_quartiled_feps_table[1,1]<-mean(distinct_quartiled_1980_1996$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_feps_table[1,2]<-mean(quartile_one$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_feps_table[1,3]<-mean(quartile_two$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_feps_table[1,4]<-mean(quartile_three$analyst_predictions_over_period)
stock_database_1980_1996_quartiled_feps_table[1,5]<-mean(quartile_four$analyst_predictions_over_period)
# forecasted_earnings
stock_database_1980_1996_quartiled_feps_table[2,1]<-mean(distinct_quartiled_1980_1996$average_forecasted_earnings)
stock_database_1980_1996_quartiled_feps_table[2,2]<-mean(quartile_one$average_forecasted_earnings)
stock_database_1980_1996_quartiled_feps_table[2,3]<-mean(quartile_two$average_forecasted_earnings)
stock_database_1980_1996_quartiled_feps_table[2,4]<-mean(quartile_three$average_forecasted_earnings)
stock_database_1980_1996_quartiled_feps_table[2,5]<-mean(quartile_four$average_forecasted_earnings)
# Actual Earnings
stock_database_1980_1996_quartiled_feps_table[3,1]<-mean(distinct_quartiled_1980_1996$actual_annual_eps)
stock_database_1980_1996_quartiled_feps_table[3,2]<-mean(quartile_one$actual_annual_eps)
stock_database_1980_1996_quartiled_feps_table[3,3]<-mean(quartile_two$actual_annual_eps)
stock_database_1980_1996_quartiled_feps_table[3,4]<-mean(quartile_three$actual_annual_eps)
stock_database_1980_1996_quartiled_feps_table[3,5]<-mean(quartile_four$actual_annual_eps)
# FEPS
stock_database_1980_1996_quartiled_feps_table[4,1]<-mean(first_unique_month_june_stock_database_1980_1996_quartiled$scaled_feps)
stock_database_1980_1996_quartiled_feps_table[4,2]<-mean(june_quartile_one$scaled_feps)
stock_database_1980_1996_quartiled_feps_table[4,3]<-mean(june_quartile_two$scaled_feps)
stock_database_1980_1996_quartiled_feps_table[4,4]<-mean(june_quartile_three$scaled_feps)
stock_database_1980_1996_quartiled_feps_table[4,5]<-mean(june_quartile_four$scaled_feps)
# Price
stock_database_1980_1996_quartiled_feps_table[5,1]<-mean(distinct_quartiled_1980_1996$price)
stock_database_1980_1996_quartiled_feps_table[5,2]<-mean(quartile_one$price)
stock_database_1980_1996_quartiled_feps_table[5,3]<-mean(quartile_two$price)
stock_database_1980_1996_quartiled_feps_table[5,4]<-mean(quartile_three$price)
stock_database_1980_1996_quartiled_feps_table[5,5]<-mean(quartile_four$price)
# Market Cap
stock_database_1980_1996_quartiled_feps_table[6,1]<-mean(distinct_quartiled_1980_1996$market_capitalization)
stock_database_1980_1996_quartiled_feps_table[6,2]<-mean(quartile_one$market_capitalization)
stock_database_1980_1996_quartiled_feps_table[6,3]<-mean(quartile_two$market_capitalization)
stock_database_1980_1996_quartiled_feps_table[6,4]<-mean(quartile_three$market_capitalization)
stock_database_1980_1996_quartiled_feps_table[6,5]<-mean(quartile_four$market_capitalization)
stock_database_1980_1996_quartiled_feps_table
stock_database_1997_2018_quartiled_feps_table <- data.frame(matrix(ncol = 5, nrow = 6))
x <- c("Overall","Q1","Q2","Q3","Q4")
colnames(stock_database_1997_2018_quartiled_feps_table) <- x
y <- c("number_of_analysts","forecasted_earnings","actual_earnings","scaled_forecast","price","market_value")
rownames(stock_database_1997_2018_quartiled_feps_table)<-y
quartile_one <-distinct_quartiled_1997_2018%>% filter(quintile_feps==1)
quartile_two<-distinct_quartiled_1997_2018 %>% filter (quintile_feps==2)
quartile_three<-distinct_quartiled_1997_2018 %>% filter (quintile_feps==3)
quartile_four<-distinct_quartiled_1997_2018 %>% filter (quintile_feps==4)
june_quartile_one <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_feps==1)
june_quartile_two <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_feps==2)
june_quartile_three <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_feps==3)
june_quartile_four <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_feps==4)
# Number of Analysts
stock_database_1997_2018_quartiled_feps_table[1,1]<-mean(distinct_quartiled_1997_2018$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_feps_table[1,2]<-mean(quartile_one$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_feps_table[1,3]<-mean(quartile_two$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_feps_table[1,4]<-mean(quartile_three$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_feps_table[1,5]<-mean(quartile_four$analyst_predictions_over_period)
# forecasted_earnings
stock_database_1997_2018_quartiled_feps_table[2,1]<-mean(distinct_quartiled_1997_2018$average_forecasted_earnings)
stock_database_1997_2018_quartiled_feps_table[2,2]<-mean(quartile_one$average_forecasted_earnings)
stock_database_1997_2018_quartiled_feps_table[2,3]<-mean(quartile_two$average_forecasted_earnings)
stock_database_1997_2018_quartiled_feps_table[2,4]<-mean(quartile_three$average_forecasted_earnings)
stock_database_1997_2018_quartiled_feps_table[2,5]<-mean(quartile_four$average_forecasted_earnings)
# Actual Earnings
stock_database_1997_2018_quartiled_feps_table[3,1]<-mean(distinct_quartiled_1997_2018$actual_annual_eps)
stock_database_1997_2018_quartiled_feps_table[3,2]<-mean(quartile_one$actual_annual_eps)
stock_database_1997_2018_quartiled_feps_table[3,3]<-mean(quartile_two$actual_annual_eps)
stock_database_1997_2018_quartiled_feps_table[3,4]<-mean(quartile_three$actual_annual_eps)
stock_database_1997_2018_quartiled_feps_table[3,5]<-mean(quartile_four$actual_annual_eps)
# FEPS
stock_database_1997_2018_quartiled_feps_table[4,1]<-mean(first_unique_month_june_stock_database_1997_2018_quartiled$scaled_feps)
stock_database_1997_2018_quartiled_feps_table[4,2]<-mean(june_quartile_one$scaled_feps)
stock_database_1997_2018_quartiled_feps_table[4,3]<-mean(june_quartile_two$scaled_feps)
stock_database_1997_2018_quartiled_feps_table[4,4]<-mean(june_quartile_three$scaled_feps)
stock_database_1997_2018_quartiled_feps_table[4,5]<-mean(june_quartile_four$scaled_feps)
# Price
stock_database_1997_2018_quartiled_feps_table[5,1]<-mean(distinct_quartiled_1997_2018$price)
stock_database_1997_2018_quartiled_feps_table[5,2]<-mean(quartile_one$price)
stock_database_1997_2018_quartiled_feps_table[5,3]<-mean(quartile_two$price)
stock_database_1997_2018_quartiled_feps_table[5,4]<-mean(quartile_three$price)
stock_database_1997_2018_quartiled_feps_table[5,5]<-mean(quartile_four$price)
# Market Cap
stock_database_1997_2018_quartiled_feps_table[6,1]<-mean(distinct_quartiled_1997_2018$market_capitalization)
stock_database_1997_2018_quartiled_feps_table[6,2]<-mean(quartile_one$market_capitalization)
stock_database_1997_2018_quartiled_feps_table[6,3]<-mean(quartile_two$market_capitalization)
stock_database_1997_2018_quartiled_feps_table[6,4]<-mean(quartile_three$market_capitalization)
stock_database_1997_2018_quartiled_feps_table[6,5]<-mean(quartile_four$market_capitalization)
stock_database_1997_2018_quartiled_feps_table
Construct
stock_database_1997_2018_quartiled_mc_table <- data.frame(matrix(ncol = 5, nrow = 6))
x <- c("Overall","Q1","Q2","Q3","Q4")
colnames(stock_database_1997_2018_quartiled_mc_table) <- x
y <- c("number_of_analysts","forecasted_earnings","actual_earnings","scaled_forecast","price","market_value")
rownames(stock_database_1997_2018_quartiled_mc_table)<-y
quartile_one <-distinct_quartiled_1997_2018%>% filter(quintile_mc ==1)
quartile_two<-distinct_quartiled_1997_2018 %>% filter (quintile_mc==2)
quartile_three<-distinct_quartiled_1997_2018 %>% filter (quintile_mc==3)
quartile_four<-distinct_quartiled_1997_2018 %>% filter (quintile_mc==4)
june_quartile_one <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_mc ==1)
june_quartile_two <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_mc ==2)
june_quartile_three <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_mc ==3)
june_quartile_four <-first_unique_month_june_stock_database_1997_2018_quartiled %>% filter (quintile_mc ==4)
# Number of Analysts
stock_database_1997_2018_quartiled_mc_table[1,1]<-mean(distinct_quartiled_1997_2018$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_mc_table[1,2]<-mean(quartile_one$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_mc_table[1,3]<-mean(quartile_two$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_mc_table[1,4]<-mean(quartile_three$analyst_predictions_over_period)
stock_database_1997_2018_quartiled_mc_table[1,5]<-mean(quartile_four$analyst_predictions_over_period)
# forecasted_earnings
stock_database_1997_2018_quartiled_mc_table[2,1]<-mean(distinct_quartiled_1997_2018$average_forecasted_earnings)
stock_database_1997_2018_quartiled_mc_table[2,2]<-mean(quartile_one$average_forecasted_earnings)
stock_database_1997_2018_quartiled_mc_table[2,3]<-mean(quartile_two$average_forecasted_earnings)
stock_database_1997_2018_quartiled_mc_table[2,4]<-mean(quartile_three$average_forecasted_earnings)
stock_database_1997_2018_quartiled_mc_table[2,5]<-mean(quartile_four$average_forecasted_earnings)
# Actual Earnings
stock_database_1997_2018_quartiled_mc_table[3,1]<-mean(distinct_quartiled_1997_2018$actual_annual_eps)
stock_database_1997_2018_quartiled_mc_table[3,2]<-mean(quartile_one$actual_annual_eps)
stock_database_1997_2018_quartiled_mc_table[3,3]<-mean(quartile_two$actual_annual_eps)
stock_database_1997_2018_quartiled_mc_table[3,4]<-mean(quartile_three$actual_annual_eps)
stock_database_1997_2018_quartiled_mc_table[3,5]<-mean(quartile_four$actual_annual_eps)
# FEPS
stock_database_1997_2018_quartiled_mc_table[4,1]<-mean(first_unique_month_june_stock_database_1997_2018_quartiled$scaled_feps)
stock_database_1997_2018_quartiled_mc_table[4,2]<-mean(june_quartile_one$scaled_feps)
stock_database_1997_2018_quartiled_mc_table[4,3]<-mean(june_quartile_two$scaled_feps)
stock_database_1997_2018_quartiled_mc_table[4,4]<-mean(june_quartile_three$scaled_feps)
stock_database_1997_2018_quartiled_mc_table[4,5]<-mean(june_quartile_four$scaled_feps)
# Price
stock_database_1997_2018_quartiled_mc_table[5,1]<-mean(distinct_quartiled_1997_2018$price)
stock_database_1997_2018_quartiled_mc_table[5,2]<-mean(quartile_one$price)
stock_database_1997_2018_quartiled_mc_table[5,3]<-mean(quartile_two$price)
stock_database_1997_2018_quartiled_mc_table[5,4]<-mean(quartile_three$price)
stock_database_1997_2018_quartiled_mc_table[5,5]<-mean(quartile_four$price)
# Market Cap
stock_database_1997_2018_quartiled_mc_table[6,1]<-mean(distinct_quartiled_1997_2018$market_capitalization)
stock_database_1997_2018_quartiled_mc_table[6,2]<-mean(quartile_one$market_capitalization)
stock_database_1997_2018_quartiled_mc_table[6,3]<-mean(quartile_two$market_capitalization)
stock_database_1997_2018_quartiled_mc_table[6,4]<-mean(quartile_three$market_capitalization)
stock_database_1997_2018_quartiled_mc_table[6,5]<-mean(quartile_four$market_capitalization)
stock_database_1997_2018_quartiled_mc_table
NA
Display tables
stock_database_1980_1996_quartiled_mc_table
stock_database_1997_2018_quartiled_mc_table
stock_database_1980_1996_quartiled_feps_table
stock_database_1997_2018_quartiled_feps_table
Save the csv files
write.csv(stock_database_1980_1996_quartiled_mc_table,"stock_database_1980_1996_quartiled_mc_table.csv")
write.csv(stock_database_1997_2018_quartiled_mc_table,"stock_database_1997_2018_quartiled_mc_table.csv")
write.csv(stock_database_1980_1996_quartiled_feps_table,"stock_database_1980_1996_quartiled_feps_table.csv")
write.csv(stock_database_1997_2018_quartiled_feps_table,"stock_database_1997_2018_quartiled_feps_table.csv")
LS0tDQp0aXRsZTogIkdlb3JnZSBTdHVkeSBSZWNyZWF0aW9uICINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRicGx5cikNCmxpYnJhcnkoZHBseXIpDQoNCiMgUmVhZCBpbiBzZXBlcmF0ZSBkYXRhYmFzZXMgIA0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2PC1yZWFkLmNzdigiaWJlc19mcm9tXzE5ODBfMTk5Nl8yMF9jb25zZWN1dGl2ZV9tb250aHNfbmFzZGFxLmNzdiIsaGVhZGVyPVRSVUUpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMTg8LXJlYWQuY3N2KCJpYmVzX2Zyb21fMTk5N18yMDE4XzIwX2NvbnNlY3V0aXZlX21vbnRoc19uYXNkYXEuY3N2IixoZWFkZXI9VFJVRSkNCg0KIyBBZGRpbmcgdGhlIG5ldyBzdGF0aXN0aWNzIHRoYXQgd2Ugd2FudCB0byBhZGQNCg0KIyBBZGRpbmcgdGhlIGF2ZXJhZ2UgYW5hbHlzdCBmb3JlY2FzdCBmb3IgZWFjaCBtb250aCANCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NjwtIHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NiAlPiUgZ3JvdXBfYnkoY3VzaXAsIGFuYWx5c3RfcHJlZGljdF95ZWFyLGFuYWx5c3RfcHJlZGljdF9tb250aCxmb3JlY2FzdF9lbmRfcGVyaW9kKSU+JSBtdXRhdGUoYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzID0gbWVhbihmX2VwcykpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMTg8LSBzdG9ja19kYXRhYmFzZV8xOTk3XzIwMTggJT4lIGdyb3VwX2J5KGN1c2lwLCBhbmFseXN0X3ByZWRpY3RfeWVhcixhbmFseXN0X3ByZWRpY3RfbW9udGgsZm9yZWNhc3RfZW5kX3BlcmlvZCklPiUgbXV0YXRlKGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncyA9IG1lYW4oZl9lcHMpKQ0KDQojR2V0dGluZyB0aGUgbnVtYmVyIG9mIGFuYWx5c3RzIG92ZXIgdGhlIHBlcmlvZA0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2PC0gc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2ICU+JSBncm91cF9ieShjdXNpcCxmb3JlY2FzdF9lbmRfcGVyaW9kKSU+JSBtdXRhdGUoYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCA9IG1heChudW1iZXJfb2ZfZXN0aW1hdGVzKSkNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxODwtIHN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCAlPiUgZ3JvdXBfYnkoY3VzaXAsZm9yZWNhc3RfZW5kX3BlcmlvZCklPiUgbXV0YXRlKGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QgPSBtYXgobnVtYmVyX29mX2VzdGltYXRlcykpDQoNCiMgQWRkaW5nIHRoZSBzY2FsZWQgZm9yZWNhc3Qgc3RhbmRhcmQgZGV2aWF0aW9uIA0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2JHNjYWxlZF9mZXBzIDwtIHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NiRmb3JlY2FzdF9zdGFuZGFyZF9kZXZpYXRpb24vc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2JHByaWNlDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMTgkc2NhbGVkX2ZlcHMgPC0gc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4JGZvcmVjYXN0X3N0YW5kYXJkX2RldmlhdGlvbi9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMTgkcHJpY2UNCg0KIyBjaGFuZ2UgZm9yZWNhc3QgZW5kIHBlcmlvZCBmcm9tIGZhY3RvciB0byBkYXRlDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYkZm9yZWNhc3RfZW5kX3BlcmlvZDwtYXMuRGF0ZShzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYkZm9yZWNhc3RfZW5kX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCRmb3JlY2FzdF9lbmRfcGVyaW9kPC1hcy5EYXRlKHN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCRmb3JlY2FzdF9lbmRfcGVyaW9kKQ0KDQojIFBhcnNlIHRvIGdldCB0aGUgeWVhciBvZiBlbmQgZGF0ZQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2JGZvcmVjYXN0X2VuZF95ZWFyIDwtIGFzLm51bWVyaWMoZm9ybWF0KHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NiRmb3JlY2FzdF9lbmRfcGVyaW9kLCIlWSIpKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4JGZvcmVjYXN0X2VuZF95ZWFyIDwtIGFzLm51bWVyaWMoZm9ybWF0KHN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCRmb3JlY2FzdF9lbmRfcGVyaW9kLCIlWSIpKQ0KDQojIFNlZSBkYXRhYmFzZXMgd2l0aCBhbGwgdGhlIHZhbHVlcyB3ZSBuZWVkDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOA0KDQojIFNlZ21lbnQgdGhlIHN0b2NrIHBlcmlvZHMgdG8gb25seSBnZXQganVuZSBjb21wYW5pZXMgDQpqdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NiA8LSBzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYgJT4lIGZpbHRlcihhbmFseXN0X3ByZWRpY3RfbW9udGg9PTYpDQpqdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCA8LSBzdG9ja19kYXRhYmFzZV8xOTk3XzIwMTggJT4lIGZpbHRlcihhbmFseXN0X3ByZWRpY3RfbW9udGg9PTYpDQoNCiMgc2VlIHRoZSBkYXRhYmFzZXMgZmlsdGVyZWQNCmp1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2DQpqdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOA0KYGBgDQpGaWx0ZXIgdGhlIGRhdGFiYXNlIHRvIGJvaWwgZG93biB0byBrZWVwIG9ubHkgbW9udGhzIGluIGp1bmUgdGhhdCANCmBgYHtyfQ0KZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYgPC0ganVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYNCmZpcnN0X21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2JGZpcnN0DQpmb3Iocm93IGluIDE6bnJvdyhmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nikpew0KICBhbmFseXN0X3ByZWRpY3RfeWVhcjwtZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZbcm93LCdhbmFseXN0X3ByZWRpY3RfeWVhciddDQogIGZvcmVjYXN0X2VuZF95ZWFyPC0gZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZbcm93LCdmb3JlY2FzdF9lbmRfeWVhciddDQogIGlmKGZvcmVjYXN0X2VuZF95ZWFyPT0oYW5hbHlzdF9wcmVkaWN0X3llYXIrMSkpew0KICAgIGZpcnN0X21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2W3JvdywnZmlyc3QnXT0ndHJ1ZScNCiAgfQ0KfQ0KZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYgPC0gZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTYgJT4lIGZpbHRlcihmaXJzdCA9PSd0cnVlJykNCg0KDQpmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCA8LSBqdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOA0KZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMTgkZmlyc3QNCmZvcihyb3cgaW4gMTpucm93KGZpcnN0X21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4KSl7DQogIGFuYWx5c3RfcHJlZGljdF95ZWFyPC1maXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOFtyb3csJ2FuYWx5c3RfcHJlZGljdF95ZWFyJ10NCiAgZm9yZWNhc3RfZW5kX3llYXI8LSBmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOFtyb3csJ2ZvcmVjYXN0X2VuZF95ZWFyJ10NCiAgaWYoZm9yZWNhc3RfZW5kX3llYXI9PShhbmFseXN0X3ByZWRpY3RfeWVhcisxKSl7DQogICAgZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThbcm93LCdmaXJzdCddPSd0cnVlJw0KICB9DQp9DQpmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCA8LSBmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOCAlPiUgZmlsdGVyKGZpcnN0ID09J3RydWUnKQ0KDQoNCiMgU2hvdyB0aGUgcmVzdWx0cyANCmZpcnN0X21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2DQpmaXJzdF9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOA0KYGBgDQpgYGB7cn0NCiMgdGFrZSBvdXQgdGhlIHJlcGVhdHMNCmZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NjwtIGZpcnN0X21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2ICU+JSBkaXN0aW5jdChjdXNpcCxhbmFseXN0X3ByZWRpY3RfeWVhciwua2VlcF9hbGwgPSBUUlVFKQ0KZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4PC0gZmlyc3RfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMTggJT4lIGRpc3RpbmN0KGN1c2lwLGFuYWx5c3RfcHJlZGljdF95ZWFyLC5rZWVwX2FsbCA9IFRSVUUpDQoNCmZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Ng0KZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4DQpgYGANCmBgYHtyfQ0KIyBDcmVhdGUgUXVhcnRpbGUgYnkgWWVhciBieSBNQy9TY2FsZWQgRkVQUw0KZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZCA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5NiAlPiVncm91cF9ieShhbmFseXN0X3ByZWRpY3RfeWVhciklPiUgbXV0YXRlIChxdWludGlsZV9mZXBzID0gbnRpbGUoc2NhbGVkX2ZlcHMsNCkpDQoNCmZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQ8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQlPiVncm91cF9ieShhbmFseXN0X3ByZWRpY3RfeWVhciklPiUgbXV0YXRlIChxdWludGlsZV9tYyA9IG50aWxlKG1hcmtldF9jYXBpdGFsaXphdGlvbiw0KSkNCg0KDQpmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkIDwtZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4ICU+JWdyb3VwX2J5KGFuYWx5c3RfcHJlZGljdF95ZWFyKSU+JSBtdXRhdGUgKHF1aW50aWxlX2ZlcHMgPSBudGlsZShzY2FsZWRfZmVwcyw0KSkNCmZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQ8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQlPiVncm91cF9ieShhbmFseXN0X3ByZWRpY3RfeWVhciklPiUgbXV0YXRlIChxdWludGlsZV9tYyA9IG50aWxlKG1hcmtldF9jYXBpdGFsaXphdGlvbiw0KSkNCg0KZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZA0KZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZA0KYGBgDQpXcml0ZSB0aGUgcmVzdWx0cyB0byBjc3YNCmBgYHtyfQ0Kd3JpdGUuY3N2KGZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQsImZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQuY3N2IikNCndyaXRlLmNzdihmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkLCJmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkLmNzdiIpDQpgYGANCg0KYGBge3J9DQpkZXNpcmVkX2NvbHVtbnMgPC0gYygnY3VzaXAnLCdmb3JlY2FzdF9lbmRfcGVyaW9kJywncXVpbnRpbGVfZmVwcycsJ3F1aW50aWxlX21jJykNCnRlbXBfMTk4MF8xOTk2X3F1YXJ0aWxlczwtIGZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRbLGRlc2lyZWRfY29sdW1uc10NCnRlbXBfMTk5N18yMDE4X3F1YXJ0aWxlczwtIGZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRbLGRlc2lyZWRfY29sdW1uc10NCmBgYA0KSW4gb3JkZXIgdG8gbGFiZWwgdGhlIHJlc3Qgb2YgdGhlIGRhdGEsIHdlIG5lZWQgdG8gdGFrZSB0aGUgY3VzaXAsIGZvcmVjYXN0X2VuZF9wZXJpb2QscXVhcnRpbGVfZmVwcyxxdWludGlsZV9tYyBhbmQgbWF0Y2ggaXQgdG8gdGhlIG9yaWdpbmFsIGRhdGENCmBgYHtyfQ0KYWxsX3F1YXJ0aWxlZF9kYXRhXzE5ODBfMTk5NiA8LSBpbm5lcl9qb2luKHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nix0ZW1wXzE5ODBfMTk5Nl9xdWFydGlsZXMsYnk9YygnY3VzaXAnPSdjdXNpcCcsJ2ZvcmVjYXN0X2VuZF9wZXJpb2QnPSdmb3JlY2FzdF9lbmRfcGVyaW9kJykpDQphbGxfcXVhcnRpbGVkX2RhdGFfMTk5N18yMDE4IDwtIGlubmVyX2pvaW4oc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4LHRlbXBfMTk5N18yMDE4X3F1YXJ0aWxlcyxieT1jKCdjdXNpcCc9J2N1c2lwJywnZm9yZWNhc3RfZW5kX3BlcmlvZCc9J2ZvcmVjYXN0X2VuZF9wZXJpb2QnKSkNCmFsbF9xdWFydGlsZWRfZGF0YV8xOTgwXzE5OTYNCmFsbF9xdWFydGlsZWRfZGF0YV8xOTk3XzIwMTgNCmBgYA0KV3JpdGUgdG8gYSBjc3YgZmlsZQ0KYGBge3J9DQp3cml0ZS5jc3YoYWxsX3F1YXJ0aWxlZF9kYXRhXzE5ODBfMTk5NiwiZnVsbF9kYXRhc2V0X2Zyb21fMTk4MF8xOTk2X3F1YXJ0aWxlZC5jc3YiKQ0Kd3JpdGUuY3N2KGFsbF9xdWFydGlsZWRfZGF0YV8xOTk3XzIwMTgsImZ1bGxfZGF0YXNldF9mcm9tXzE5OTdfMjAxOF9xdWFydGlsZWQuY3N2IikNCmBgYA0KS2VlcCBvbmx5IG9uZSBkaXN0aW5jdCByb3cgcGVyIGRhdGENCmBgYHtyfQ0KZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiA8LSBhbGxfcXVhcnRpbGVkX2RhdGFfMTk4MF8xOTk2ICU+JSBkaXN0aW5jdChjdXNpcCxhbmFseXN0X3ByZWRpY3RfeWVhcixhbmFseXN0X3ByZWRpY3RfbW9udGgsLmtlZXBfYWxsID0gVFJVRSkgDQpkaXN0aW5jdF9xdWFydGlsZWRfMTk5N18yMDE4IDwtIGFsbF9xdWFydGlsZWRfZGF0YV8xOTk3XzIwMTggJT4lIGRpc3RpbmN0KGN1c2lwLGFuYWx5c3RfcHJlZGljdF95ZWFyLGFuYWx5c3RfcHJlZGljdF9tb250aCwua2VlcF9hbGwgPSBUUlVFKSANCmRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYNCmRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTgNCmBgYA0KTW9kZSBGdW5jdGlvbg0KYGBge3J9DQpnZXRtb2RlIDwtIGZ1bmN0aW9uKHYpIHsNCiAgIHVuaXF2IDwtIHVuaXF1ZSh2KQ0KICAgdW5pcXZbd2hpY2gubWF4KHRhYnVsYXRlKG1hdGNoKHYsIHVuaXF2KSkpXQ0KfQ0KYGBgDQoNCkNvbnN0cnVjdCB0aGUgU3VtbWFyeSBTdGF0IFRhYmxlIGJ5IE1hcmtldCBDYXAgDQpgYGB7cn0NCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGU8LSBkYXRhLmZyYW1lKG1hdHJpeChuY29sID0gNSwgbnJvdyA9IDYpKQ0KeCA8LSBjKCJPdmVyYWxsIiwiUTEiLCJRMiIsIlEzIiwiUTQiKQ0KY29sbmFtZXMoc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZSkgPC0geA0KeSA8LSBjKCJudW1iZXJfb2ZfYW5hbHlzdHMiLCJmb3JlY2FzdGVkX2Vhcm5pbmdzIiwiYWN0dWFsX2Vhcm5pbmdzIiwic2NhbGVkX2ZvcmVjYXN0IiwicHJpY2UiLCJtYXJrZXRfdmFsdWUiKQ0Kcm93bmFtZXMoc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZSk8LXkNCg0KcXVhcnRpbGVfb25lIDwtZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiU+JSBmaWx0ZXIocXVpbnRpbGVfbWM9PTEpDQpxdWFydGlsZV90d288LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYgJT4lIGZpbHRlciAocXVpbnRpbGVfbWM9PTIpDQpxdWFydGlsZV90aHJlZTwtZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiAlPiUgZmlsdGVyIChxdWludGlsZV9tYz09MykNCnF1YXJ0aWxlX2ZvdXI8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYgJT4lIGZpbHRlciAocXVpbnRpbGVfbWM9PTQpDQoNCg0KanVuZV9xdWFydGlsZV9vbmUgPC1maXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkICU+JSBmaWx0ZXIgKHF1aW50aWxlX21jID09MSkNCmp1bmVfcXVhcnRpbGVfdHdvIDwtZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZCAlPiUgZmlsdGVyIChxdWludGlsZV9tYyA9PTIpDQpqdW5lX3F1YXJ0aWxlX3RocmVlIDwtZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZCAlPiUgZmlsdGVyIChxdWludGlsZV9tYyA9PTMpDQpqdW5lX3F1YXJ0aWxlX2ZvdXIgPC1maXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkICU+JSBmaWx0ZXIgKHF1aW50aWxlX21jID09NCkNCg0KDQojIE51bWJlciBvZiBBbmFseXN0cw0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVsxLDFdPC1tZWFuKGRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYkYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMSwyXTwtbWVhbihxdWFydGlsZV9vbmUkYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMSwzXTwtbWVhbihxdWFydGlsZV90d28kYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMSw0XTwtbWVhbihxdWFydGlsZV90aHJlZSRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVsxLDVdPC1tZWFuKHF1YXJ0aWxlX2ZvdXIkYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCg0KIyBmb3JlY2FzdGVkX2Vhcm5pbmdzDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzIsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiRhdmVyYWdlX2ZvcmVjYXN0ZWRfZWFybmluZ3MpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzIsMl08LW1lYW4ocXVhcnRpbGVfb25lJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMiwzXTwtbWVhbihxdWFydGlsZV90d28kYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVsyLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMiw1XTwtbWVhbihxdWFydGlsZV9mb3VyJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCg0KIyBBY3R1YWwgRWFybmluZ3MNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMywxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk4MF8xOTk2JGFjdHVhbF9hbm51YWxfZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVszLDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbMywzXTwtbWVhbihxdWFydGlsZV90d28kYWN0dWFsX2FubnVhbF9lcHMpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzMsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkYWN0dWFsX2FubnVhbF9lcHMpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzMsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRhY3R1YWxfYW5udWFsX2VwcykNCg0KIyBGRVBTDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzQsMV08LW1lYW4oZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZCRzY2FsZWRfZmVwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNCwyXTwtbWVhbihqdW5lX3F1YXJ0aWxlX29uZSRzY2FsZWRfZmVwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNCwzXTwtbWVhbihqdW5lX3F1YXJ0aWxlX3R3byRzY2FsZWRfZmVwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNCw0XTwtbWVhbihqdW5lX3F1YXJ0aWxlX3RocmVlJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVs0LDVdPC1tZWFuKGp1bmVfcXVhcnRpbGVfZm91ciRzY2FsZWRfZmVwcykNCg0KIyBQcmljZSANCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNSwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk4MF8xOTk2JHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVs1LDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRwcmljZSkNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNSwzXTwtbWVhbihxdWFydGlsZV90d28kcHJpY2UpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzUsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkcHJpY2UpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzUsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRwcmljZSkNCg0KIyBNYXJrZXQgQ2FwIA0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVs2LDFdPC1tZWFuKGRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYkbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9tY190YWJsZVs2LDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzYsM108LW1lYW4ocXVhcnRpbGVfdHdvJG1hcmtldF9jYXBpdGFsaXphdGlvbikNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGVbNiw0XTwtbWVhbihxdWFydGlsZV90aHJlZSRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX21jX3RhYmxlWzYsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQoNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGUNCmBgYA0KQ29uc3RydWN0IHRoZSBTdW1tYXJ5IFN0YXQgZm9yIHN0YW5kYXJkIEZFUFMNCmBgYHtyfQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlIDwtIGRhdGEuZnJhbWUobWF0cml4KG5jb2wgPSA1LCBucm93ID0gNikpDQp4IDwtIGMoIk92ZXJhbGwiLCJRMSIsIlEyIiwiUTMiLCJRNCIpDQpjb2xuYW1lcyhzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGUpIDwtIHgNCnkgPC0gYygibnVtYmVyX29mX2FuYWx5c3RzIiwiZm9yZWNhc3RlZF9lYXJuaW5ncyIsImFjdHVhbF9lYXJuaW5ncyIsInNjYWxlZF9mb3JlY2FzdCIsInByaWNlIiwibWFya2V0X3ZhbHVlIikNCnJvd25hbWVzKHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZSk8LXkNCg0KcXVhcnRpbGVfb25lIDwtZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiU+JSBmaWx0ZXIocXVpbnRpbGVfZmVwcz09MSkNCnF1YXJ0aWxlX3R3bzwtZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiAlPiUgZmlsdGVyIChxdWludGlsZV9mZXBzPT0yKQ0KcXVhcnRpbGVfdGhyZWU8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MykNCnF1YXJ0aWxlX2ZvdXI8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTgwXzE5OTYgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09NCkNCg0KDQpqdW5lX3F1YXJ0aWxlX29uZSA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MSkNCmp1bmVfcXVhcnRpbGVfdHdvIDwtZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZCAlPiUgZmlsdGVyIChxdWludGlsZV9mZXBzPT0yKQ0KanVuZV9xdWFydGlsZV90aHJlZSA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MykNCmp1bmVfcXVhcnRpbGVfZm91ciA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09NCkNCg0KDQojIE51bWJlciBvZiBBbmFseXN0cw0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzEsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzEsMl08LW1lYW4ocXVhcnRpbGVfb25lJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMSwzXTwtbWVhbihxdWFydGlsZV90d28kYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVsxLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMSw1XTwtbWVhbihxdWFydGlsZV9mb3VyJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQoNCiMgZm9yZWNhc3RlZF9lYXJuaW5ncw0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzIsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiRhdmVyYWdlX2ZvcmVjYXN0ZWRfZWFybmluZ3MpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMiwyXTwtbWVhbihxdWFydGlsZV9vbmUkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzIsM108LW1lYW4ocXVhcnRpbGVfdHdvJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVsyLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVsyLDVdPC1tZWFuKHF1YXJ0aWxlX2ZvdXIkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0KDQojIEFjdHVhbCBFYXJuaW5ncw0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzMsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5ODBfMTk5NiRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVszLDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVszLDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVszLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGFjdHVhbF9hbm51YWxfZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzMsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRhY3R1YWxfYW5udWFsX2VwcykNCg0KIyBGRVBTDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCwxXTwtbWVhbihmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzQsMl08LW1lYW4oanVuZV9xdWFydGlsZV9vbmUkc2NhbGVkX2ZlcHMpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCwzXTwtbWVhbihqdW5lX3F1YXJ0aWxlX3R3byRzY2FsZWRfZmVwcykNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVs0LDRdPC1tZWFuKGp1bmVfcXVhcnRpbGVfdGhyZWUkc2NhbGVkX2ZlcHMpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCw1XTwtbWVhbihqdW5lX3F1YXJ0aWxlX2ZvdXIkc2NhbGVkX2ZlcHMpDQoNCiMgUHJpY2UgDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNSwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk4MF8xOTk2JHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsMl08LW1lYW4ocXVhcnRpbGVfb25lJHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsM108LW1lYW4ocXVhcnRpbGVfdHdvJHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkcHJpY2UpDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNSw1XTwtbWVhbihxdWFydGlsZV9mb3VyJHByaWNlKQ0KDQojIE1hcmtldCBDYXAgDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNiwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk4MF8xOTk2JG1hcmtldF9jYXBpdGFsaXphdGlvbikNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZVs2LDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQpzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNiwzXTwtbWVhbihxdWFydGlsZV90d28kbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzYsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzYsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQoNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZQ0KYGBgDQpgYGB7cn0NCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZSA8LSBkYXRhLmZyYW1lKG1hdHJpeChuY29sID0gNSwgbnJvdyA9IDYpKQ0KeCA8LSBjKCJPdmVyYWxsIiwiUTEiLCJRMiIsIlEzIiwiUTQiKQ0KY29sbmFtZXMoc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlKSA8LSB4DQp5IDwtIGMoIm51bWJlcl9vZl9hbmFseXN0cyIsImZvcmVjYXN0ZWRfZWFybmluZ3MiLCJhY3R1YWxfZWFybmluZ3MiLCJzY2FsZWRfZm9yZWNhc3QiLCJwcmljZSIsIm1hcmtldF92YWx1ZSIpDQpyb3duYW1lcyhzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGUpPC15DQoNCg0KcXVhcnRpbGVfb25lIDwtZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCU+JSBmaWx0ZXIocXVpbnRpbGVfZmVwcz09MSkNCnF1YXJ0aWxlX3R3bzwtZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCAlPiUgZmlsdGVyIChxdWludGlsZV9mZXBzPT0yKQ0KcXVhcnRpbGVfdGhyZWU8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTggJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MykNCnF1YXJ0aWxlX2ZvdXI8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTggJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09NCkNCg0KDQpqdW5lX3F1YXJ0aWxlX29uZSA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MSkNCmp1bmVfcXVhcnRpbGVfdHdvIDwtZmlyc3RfdW5pcXVlX21vbnRoX2p1bmVfc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZCAlPiUgZmlsdGVyIChxdWludGlsZV9mZXBzPT0yKQ0KanVuZV9xdWFydGlsZV90aHJlZSA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09MykNCmp1bmVfcXVhcnRpbGVfZm91ciA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfZmVwcz09NCkNCg0KDQojIE51bWJlciBvZiBBbmFseXN0cw0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzEsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzEsMl08LW1lYW4ocXVhcnRpbGVfb25lJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMSwzXTwtbWVhbihxdWFydGlsZV90d28kYW5hbHlzdF9wcmVkaWN0aW9uc19vdmVyX3BlcmlvZCkNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVsxLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMSw1XTwtbWVhbihxdWFydGlsZV9mb3VyJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQoNCiMgZm9yZWNhc3RlZF9lYXJuaW5ncw0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzIsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCRhdmVyYWdlX2ZvcmVjYXN0ZWRfZWFybmluZ3MpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbMiwyXTwtbWVhbihxdWFydGlsZV9vbmUkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzIsM108LW1lYW4ocXVhcnRpbGVfdHdvJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVsyLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVsyLDVdPC1tZWFuKHF1YXJ0aWxlX2ZvdXIkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0KDQojIEFjdHVhbCBFYXJuaW5ncw0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzMsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVszLDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVszLDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVszLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGFjdHVhbF9hbm51YWxfZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzMsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRhY3R1YWxfYW5udWFsX2VwcykNCg0KIyBGRVBTDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCwxXTwtbWVhbihmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzQsMl08LW1lYW4oanVuZV9xdWFydGlsZV9vbmUkc2NhbGVkX2ZlcHMpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCwzXTwtbWVhbihqdW5lX3F1YXJ0aWxlX3R3byRzY2FsZWRfZmVwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVs0LDRdPC1tZWFuKGp1bmVfcXVhcnRpbGVfdGhyZWUkc2NhbGVkX2ZlcHMpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNCw1XTwtbWVhbihqdW5lX3F1YXJ0aWxlX2ZvdXIkc2NhbGVkX2ZlcHMpDQoNCiMgUHJpY2UgDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNSwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk5N18yMDE4JHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsMl08LW1lYW4ocXVhcnRpbGVfb25lJHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsM108LW1lYW4ocXVhcnRpbGVfdHdvJHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzUsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkcHJpY2UpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNSw1XTwtbWVhbihxdWFydGlsZV9mb3VyJHByaWNlKQ0KDQojIE1hcmtldCBDYXAgDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNiwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk5N18yMDE4JG1hcmtldF9jYXBpdGFsaXphdGlvbikNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZVs2LDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGVbNiwzXTwtbWVhbihxdWFydGlsZV90d28kbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzYsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlWzYsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQoNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZQ0KYGBgDQpDb25zdHJ1Y3QgDQpgYGB7cn0NCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGUgPC0gZGF0YS5mcmFtZShtYXRyaXgobmNvbCA9IDUsIG5yb3cgPSA2KSkNCnggPC0gYygiT3ZlcmFsbCIsIlExIiwiUTIiLCJRMyIsIlE0IikNCmNvbG5hbWVzKHN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGUpIDwtIHgNCnkgPC0gYygibnVtYmVyX29mX2FuYWx5c3RzIiwiZm9yZWNhc3RlZF9lYXJuaW5ncyIsImFjdHVhbF9lYXJuaW5ncyIsInNjYWxlZF9mb3JlY2FzdCIsInByaWNlIiwibWFya2V0X3ZhbHVlIikNCnJvd25hbWVzKHN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGUpPC15DQoNCnF1YXJ0aWxlX29uZSA8LWRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTglPiUgZmlsdGVyKHF1aW50aWxlX21jID09MSkNCnF1YXJ0aWxlX3R3bzwtZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCAlPiUgZmlsdGVyIChxdWludGlsZV9tYz09MikNCnF1YXJ0aWxlX3RocmVlPC1kaXN0aW5jdF9xdWFydGlsZWRfMTk5N18yMDE4ICU+JSBmaWx0ZXIgKHF1aW50aWxlX21jPT0zKQ0KcXVhcnRpbGVfZm91cjwtZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCAlPiUgZmlsdGVyIChxdWludGlsZV9tYz09NCkNCg0KDQpqdW5lX3F1YXJ0aWxlX29uZSA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfbWMgPT0xKQ0KanVuZV9xdWFydGlsZV90d28gPC1maXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkICU+JSBmaWx0ZXIgKHF1aW50aWxlX21jID09MikNCmp1bmVfcXVhcnRpbGVfdGhyZWUgPC1maXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkICU+JSBmaWx0ZXIgKHF1aW50aWxlX21jID09MykNCmp1bmVfcXVhcnRpbGVfZm91ciA8LWZpcnN0X3VuaXF1ZV9tb250aF9qdW5lX3N0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWQgJT4lIGZpbHRlciAocXVpbnRpbGVfbWMgPT00KQ0KDQoNCiMgTnVtYmVyIG9mIEFuYWx5c3RzDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzEsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVsxLDJdPC1tZWFuKHF1YXJ0aWxlX29uZSRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVsxLDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVsxLDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJGFuYWx5c3RfcHJlZGljdGlvbnNfb3Zlcl9wZXJpb2QpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzEsNV08LW1lYW4ocXVhcnRpbGVfZm91ciRhbmFseXN0X3ByZWRpY3Rpb25zX292ZXJfcGVyaW9kKQ0KDQojIGZvcmVjYXN0ZWRfZWFybmluZ3MNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbMiwxXTwtbWVhbihkaXN0aW5jdF9xdWFydGlsZWRfMTk5N18yMDE4JGF2ZXJhZ2VfZm9yZWNhc3RlZF9lYXJuaW5ncykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbMiwyXTwtbWVhbihxdWFydGlsZV9vbmUkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVsyLDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRhdmVyYWdlX2ZvcmVjYXN0ZWRfZWFybmluZ3MpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzIsNF08LW1lYW4ocXVhcnRpbGVfdGhyZWUkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVsyLDVdPC1tZWFuKHF1YXJ0aWxlX2ZvdXIkYXZlcmFnZV9mb3JlY2FzdGVkX2Vhcm5pbmdzKQ0KDQojIEFjdHVhbCBFYXJuaW5ncw0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVszLDFdPC1tZWFuKGRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTgkYWN0dWFsX2FubnVhbF9lcHMpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzMsMl08LW1lYW4ocXVhcnRpbGVfb25lJGFjdHVhbF9hbm51YWxfZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVszLDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbMyw0XTwtbWVhbihxdWFydGlsZV90aHJlZSRhY3R1YWxfYW5udWFsX2VwcykNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbMyw1XTwtbWVhbihxdWFydGlsZV9mb3VyJGFjdHVhbF9hbm51YWxfZXBzKQ0KDQojIEZFUFMNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbNCwxXTwtbWVhbihmaXJzdF91bmlxdWVfbW9udGhfanVuZV9zdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs0LDJdPC1tZWFuKGp1bmVfcXVhcnRpbGVfb25lJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs0LDNdPC1tZWFuKGp1bmVfcXVhcnRpbGVfdHdvJHNjYWxlZF9mZXBzKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs0LDRdPC1tZWFuKGp1bmVfcXVhcnRpbGVfdGhyZWUkc2NhbGVkX2ZlcHMpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzQsNV08LW1lYW4oanVuZV9xdWFydGlsZV9mb3VyJHNjYWxlZF9mZXBzKQ0KDQojIFByaWNlIA0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs1LDFdPC1tZWFuKGRpc3RpbmN0X3F1YXJ0aWxlZF8xOTk3XzIwMTgkcHJpY2UpDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzUsMl08LW1lYW4ocXVhcnRpbGVfb25lJHByaWNlKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs1LDNdPC1tZWFuKHF1YXJ0aWxlX3R3byRwcmljZSkNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbNSw0XTwtbWVhbihxdWFydGlsZV90aHJlZSRwcmljZSkNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbNSw1XTwtbWVhbihxdWFydGlsZV9mb3VyJHByaWNlKQ0KDQojIE1hcmtldCBDYXAgDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzYsMV08LW1lYW4oZGlzdGluY3RfcXVhcnRpbGVkXzE5OTdfMjAxOCRtYXJrZXRfY2FwaXRhbGl6YXRpb24pDQpzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlWzYsMl08LW1lYW4ocXVhcnRpbGVfb25lJG1hcmtldF9jYXBpdGFsaXphdGlvbikNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbNiwzXTwtbWVhbihxdWFydGlsZV90d28kbWFya2V0X2NhcGl0YWxpemF0aW9uKQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZVs2LDRdPC1tZWFuKHF1YXJ0aWxlX3RocmVlJG1hcmtldF9jYXBpdGFsaXphdGlvbikNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGVbNiw1XTwtbWVhbihxdWFydGlsZV9mb3VyJG1hcmtldF9jYXBpdGFsaXphdGlvbikNCg0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9tY190YWJsZQ0KDQpgYGANCkRpc3BsYXkgdGFibGVzDQpgYGB7cn0NCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGUNCnN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfbWNfdGFibGUNCnN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfZmVwc190YWJsZQ0Kc3RvY2tfZGF0YWJhc2VfMTk5N18yMDE4X3F1YXJ0aWxlZF9mZXBzX3RhYmxlDQpgYGANClNhdmUgdGhlIGNzdiBmaWxlcyANCmBgYHtyfQ0Kd3JpdGUuY3N2KHN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGUsInN0b2NrX2RhdGFiYXNlXzE5ODBfMTk5Nl9xdWFydGlsZWRfbWNfdGFibGUuY3N2IikNCndyaXRlLmNzdihzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlLCJzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX21jX3RhYmxlLmNzdiIpDQp3cml0ZS5jc3Yoc3RvY2tfZGF0YWJhc2VfMTk4MF8xOTk2X3F1YXJ0aWxlZF9mZXBzX3RhYmxlLCJzdG9ja19kYXRhYmFzZV8xOTgwXzE5OTZfcXVhcnRpbGVkX2ZlcHNfdGFibGUuY3N2IikNCndyaXRlLmNzdihzdG9ja19kYXRhYmFzZV8xOTk3XzIwMThfcXVhcnRpbGVkX2ZlcHNfdGFibGUsInN0b2NrX2RhdGFiYXNlXzE5OTdfMjAxOF9xdWFydGlsZWRfZmVwc190YWJsZS5jc3YiKQ0KYGBgDQoNCg==